WebRTC ICE ํ๋ณด์ ๋ํ ์ฌ์ธต ๊ฐ์ด๋๋ก ์ํํ ์ค์๊ฐ ํต์ ์ ์ ๊ธ ํด์ ํ์ธ์. STUN, TURN ๋ฐ P2P ๋คํธ์ํน์ ๋ณต์ก์ฑ์ ์ดํดํ์ฌ ๊ธ๋ก๋ฒ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ์ํ ์ฐ๊ฒฐ ์ค์ ์ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์.
ํ๋ก ํธ์๋ WebRTC ICE ํ๋ณด: ๊ธ๋ก๋ฒ ์ฒญ์ค์ ์ํ ์ฐ๊ฒฐ ์ค์ ์ต์ ํ
๋์์์ด ํ์ฅ๋๋ ์ค์๊ฐ ํต์ (RTC) ์ ํ๋ฆฌ์ผ์ด์ ํ๊ฒฝ์์ WebRTC๋ ๋ธ๋ผ์ฐ์ ์ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ์ง์ ์ ์ธ P2P(Peer-to-Peer) ์ฐ๊ฒฐ์ ์ง์ํ๋ ๊ฐ๋ ฅํ๊ณ ์คํ ์์ค ๊ธฐ์ ๋ก ๋๊ฐ์ ๋ํ๋ ๋๋ค. ํ์ ํ์, ์จ๋ผ์ธ ๊ฒ์ ๋๋ ํ์ ๋๊ตฌ๋ WebRTC๋ ์ํํ๊ณ ๋ฎ์ ์ง์ฐ ์๊ฐ์ ์ํธ ์์ฉ์ ์ด์งํฉ๋๋ค. ์ด๋ฌํ P2P ์ฐ๊ฒฐ ์ค์ ์ ํต์ฌ์๋ ICE(Interactive Connectivity Establishment) ํ๋ ์์ํฌ์ ๋ณต์กํ ํ๋ก์ธ์ค๊ฐ ์์ผ๋ฉฐ, ๋ค์ํ ๊ธ๋ก๋ฒ ๋คํธ์ํฌ์์ ์ฐ๊ฒฐ ์ฑ๊ณต๋ฅ ์ ์ต์ ํํ๋ ค๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์๊ฒ ICE ํ๋ณด๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๊ธ๋ก๋ฒ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ๊ณผ์
์ธํฐ๋ท์ ํตํด ์์์ ๋ ์ฅ์น๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒ์ ๊ฐ๋จํ์ง ์์ต๋๋ค. ์ฌ์ฉ์๋ ๋ค์ํ ๋คํธ์ํฌ ๊ตฌ์ฑ ๋ค์ ์์ต๋๋ค. NAT(Network Address Translation)๊ฐ ์๋ ํ ๋ผ์ฐํฐ, ๊ธฐ์ ๋ฐฉํ๋ฒฝ, CGNAT(Carrier-Grade NAT)๊ฐ ์๋ ๋ชจ๋ฐ์ผ ๋คํธ์ํฌ, ๋ณต์กํ ํ๋ก์ ์๋ฒ๊น์ง. ์ด๋ฌํ ์ค๊ฐ ์ฅ์น๋ ์ข ์ข ์ง์ ์ ์ธ P2P ํต์ ์ ๊ฐ๋ฆฌ๊ณ ์๋นํ ์ฅ์ ๋ฌผ์ ์ ์ํฉ๋๋ค. ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ์ด๋ฌํ ๊ณผ์ ๊ฐ ์ฆํญ๋๋ฉฐ, ๊ฐ๋ฐ์๋ ๊ณ ์ ํ ์์ฑ๊ณผ ์ ํ ์ฌํญ์ ๊ฐ์ง ๋ฐฉ๋ํ ๋คํธ์ํฌ ํ๊ฒฝ ์คํํธ๋ผ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
WebRTC ICE๋ ๋ฌด์์ธ๊ฐ์?
ICE(Interactive Connectivity Establishment)๋ IETF์์ ๊ฐ๋ฐํ ํ๋ ์์ํฌ๋ก, ๋ ํผ์ด ๊ฐ์ ์ต์์ ์ค์๊ฐ ํต์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ๊ฐ ํผ์ด์ ๋ํ ์ ์ฌ์ ์ฐ๊ฒฐ ์ฃผ์ ๋ชฉ๋ก, ์ฆ ICE ํ๋ณด๋ฅผ ์์งํ์ฌ ์๋ํฉ๋๋ค. ์ด๋ฌํ ํ๋ณด๋ ํผ์ด์ ๋๋ฌํ ์ ์๋ ๋ค์ํ ๋ฐฉ๋ฒ์ ๋ํ๋ ๋๋ค.
ICE๋ ์ฃผ๋ก ๋ ๊ฐ์ง ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ํ๋ณด๋ฅผ ๊ฒ์ํฉ๋๋ค.
- STUN(Session Traversal Utilities for NAT): STUN ์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ ์ ๊ณต๊ฐ IP ์ฃผ์์ ์์ ์ด ๋ค์ ์๋ NAT ์ ํ์ ๊ฒ์ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ์ธ๋ถ ์ธ๊ณ์ ์ด๋ป๊ฒ ๋ณด์ด๋์ง ์ดํดํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
- TURN(Traversal Using Relays around NAT): ์ง์ ์ ์ธ P2P ํต์ ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ(์: ๋์นญ NAT ๋๋ ์ ํ์ ์ธ ๋ฐฉํ๋ฒฝ์ผ๋ก ์ธํด) TURN ์๋ฒ๊ฐ ๋ฆด๋ ์ด ์ญํ ์ ํฉ๋๋ค. ๋ฐ์ดํฐ๋ TURN ์๋ฒ๋ก ์ ์ก๋๊ณ , TURN ์๋ฒ๋ ์ด๋ฅผ ๋ค๋ฅธ ํผ์ด๋ก ์ ๋ฌํฉ๋๋ค. ์ด๋ก ์ธํด ์ถ๊ฐ์ ์ธ ์ง์ฐ ์๊ฐ๊ณผ ๋์ญํญ ๋น์ฉ์ด ๋ฐ์ํ์ง๋ง ์ฐ๊ฒฐ์ฑ์ ๋ณด์ฅ๋ฉ๋๋ค.
ICE ํ๋ณด๋ ์ฌ๋ฌ ์ ํ์ด ์์ผ๋ฉฐ, ๊ฐ ์ ํ์ ๋ค๋ฅธ ์ฐ๊ฒฐ ๋ฉ์ปค๋์ฆ์ ๋ํ๋ ๋๋ค.
- ํธ์คํธ ํ๋ณด: ๋ก์ปฌ ๋จธ์ ์ ์ง์ IP ์ฃผ์ ๋ฐ ํฌํธ์ ๋๋ค. ์ง์ฐ ์๊ฐ์ด ๊ฐ์ฅ ๋ฎ์ผ๋ฏ๋ก ๊ฐ์ฅ ๋ฐ๋์งํฉ๋๋ค.
- srflx ํ๋ณด: ์๋ฒ ๋ฐ์ฌ ํ๋ณด์ ๋๋ค. STUN ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์๋ฉ๋๋ค. STUN ์๋ฒ๋ STUN ์๋ฒ์์ ๋ณด์ด๋ ํด๋ผ์ด์ธํธ์ ๊ณต๊ฐ IP ์ฃผ์ ๋ฐ ํฌํธ๋ฅผ ๋ณด๊ณ ํฉ๋๋ค.
- prflx ํ๋ณด: ํผ์ด ๋ฐ์ฌ ํ๋ณด์ ๋๋ค. ํผ์ด ๊ฐ์ ๊ธฐ์กด ๋ฐ์ดํฐ ํ๋ฆ์ ํตํด ํ์ต๋ฉ๋๋ค. ํผ์ด A๊ฐ ํผ์ด B๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์๋ค๋ฉด, ํผ์ด B๋ ํด๋น ์ฐ๊ฒฐ์ ๋ํ ํผ์ด A์ ๋ฐ์ฌ ์ฃผ์๋ฅผ ํ์ตํ ์ ์์ต๋๋ค.
- ๋ฆด๋ ์ด ํ๋ณด: TURN ์๋ฒ๋ฅผ ํตํด ์ป์ ํ๋ณด์ ๋๋ค. STUN ๋ฐ ํธ์คํธ ํ๋ณด๊ฐ ์คํจํ๋ฉด ICE๋ ๋ฆด๋ ์ด๋ก TURN ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ๋์ฒด๋ ์ ์์ต๋๋ค.
ICE ํ๋ณด ์์ฑ ํ๋ก์ธ์ค
WebRTC `RTCPeerConnection`์ด ์ค์ ๋๋ฉด ๋ธ๋ผ์ฐ์ ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ICE ํ๋ณด ์์ง ํ๋ก์ธ์ค๋ฅผ ์๋์ผ๋ก ์์ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
- ๋ก์ปฌ ํ๋ณด ๊ฒ์: ์์คํ ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๋ก์ปฌ ๋คํธ์ํฌ ์ธํฐํ์ด์ค์ ํด๋น IP ์ฃผ์ ๋ฐ ํฌํธ๋ฅผ ์๋ณํฉ๋๋ค.
- STUN ์๋ฒ ์ํธ ์์ฉ: STUN ์๋ฒ๊ฐ ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ STUN ์์ฒญ์ ๋ณด๋ ๋๋ค. STUN ์๋ฒ๋ ์๋ฒ์ ๊ด์ ์์ ๋ณด์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณต๊ฐ IP ๋ฐ ํฌํธ(srflx ํ๋ณด)๋ก ์๋ตํฉ๋๋ค.
- TURN ์๋ฒ ์ํธ ์์ฉ (๊ตฌ์ฑ๋ ๊ฒฝ์ฐ): TURN ์๋ฒ๊ฐ ์ง์ ๋๊ณ ์ง์ P2P ๋๋ STUN ๊ธฐ๋ฐ ์ฐ๊ฒฐ์ด ์คํจํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ TURN ์๋ฒ์ ํต์ ํ์ฌ ๋ฆด๋ ์ด ์ฃผ์(๋ฆด๋ ์ด ํ๋ณด)๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- ํ์: ํ๋ณด๊ฐ ์์ง๋๋ฉด ์๊ทธ๋๋ง ์๋ฒ๋ฅผ ํตํด ํผ์ด ๊ฐ์ ๊ตํ๋ฉ๋๋ค. ๊ฐ ํผ์ด๋ ์๋๋ฐฉ์ ์ ์ฌ์ ์ฐ๊ฒฐ ์ฃผ์ ๋ชฉ๋ก์ ์์ ํฉ๋๋ค.
- ์ฐ๊ฒฐ ํ์ธ: ICE๋ ์์ชฝ ํผ์ด์ ํ๋ณด ์์ ์ฌ์ฉํ์ฌ ์ฒด๊ณ์ ์ผ๋ก ์ฐ๊ฒฐ์ ์ค์ ํ๋ ค๊ณ ์๋ํฉ๋๋ค. ๊ฐ์ฅ ํจ์จ์ ์ธ ๊ฒฝ๋ก(์: ํธ์คํธ-ํธ์คํธ, ๋ค์ srflx-srflx)๋ฅผ ๋จผ์ ์ฐ์ ์ํ๊ณ ํ์ํ ๊ฒฝ์ฐ ๋ ํจ์จ์ ์ธ ๊ฒฝ๋ก(์: ๋ฆด๋ ์ด)๋ก ๋์ฒด๋ฉ๋๋ค.
์๊ทธ๋๋ง ์๋ฒ์ ์ญํ
WebRTC ์์ฒด๋ ์๊ทธ๋๋ง ํ๋กํ ์ฝ์ ์ ์ํ์ง ์๋๋ค๋ ์ ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์๊ทธ๋๋ง์ ICE ํ๋ณด, ์ธ์ ์ค๋ช (SDP - Session Description Protocol) ๋ฐ ์ฐ๊ฒฐ ์ ์ด ๋ฉ์์ง๋ฅผ ํฌํจํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํผ์ด๊ฐ ๊ตํํ๋ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก WebSockets ๋๋ ๊ธฐํ ์ค์๊ฐ ๋ฉ์์ง ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๊ตฌ์ถ๋ ์๊ทธ๋๋ง ์๋ฒ๋ ์ด ๊ตํ์ ํ์์ ์ ๋๋ค. ๊ฐ๋ฐ์๋ ํด๋ผ์ด์ธํธ ๊ฐ์ ICE ํ๋ณด๋ฅผ ๊ณต์ ํ๊ธฐ ์ํด ๊ฒฌ๊ณ ํ ์๊ทธ๋๋ง ์ธํ๋ผ๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค.
์: ๋ด์์ Alice์ ๋์ฟ์ Bob์ด ์ฐ๊ฒฐ์ ์๋ํ๋ค๊ณ ์์ํด ๋ณด์ธ์. Alice์ ๋ธ๋ผ์ฐ์ ๋ ICE ํ๋ณด(ํธ์คํธ, srflx)๋ฅผ ์์งํฉ๋๋ค. ์ด๋ฅผ ์๊ทธ๋๋ง ์๋ฒ๋ฅผ ํตํด Bob์๊ฒ ๋ณด๋ ๋๋ค. Bob์ ๋ธ๋ผ์ฐ์ ๋ ๋์ผํ๊ฒ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ Bob์ ๋ธ๋ผ์ฐ์ ๋ Alice์ ํ๋ณด๋ฅผ ์์ ํ๊ณ ๊ฐ ํ๋ณด์ ์ฐ๊ฒฐ์ ์๋ํฉ๋๋ค. ๋์์ Alice์ ๋ธ๋ผ์ฐ์ ๋ Bob์ ํ๋ณด์ ์ฐ๊ฒฐ์ ์๋ํฉ๋๋ค. ์ฑ๊ณตํ ์ฒซ ๋ฒ์งธ ์ฐ๊ฒฐ ์์ด ํ๋ฆฝ๋ ๋ฏธ๋์ด ๊ฒฝ๋ก๊ฐ ๋ฉ๋๋ค.
๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ICE ํ๋ณด ์์ง ์ต์ ํ
๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ์ฐ๊ฒฐ ์ฑ๊ณต์ ๊ทน๋ํํ๊ณ ์ง์ฐ ์๊ฐ์ ์ต์ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ค์์ ICE ํ๋ณด ์์ง์ ์ต์ ํํ๊ธฐ ์ํ ์ฃผ์ ์ ๋ต์ ๋๋ค.
1. ์ ๋ต์ STUN/TURN ์๋ฒ ๋ฐฐํฌ
STUN ๋ฐ TURN ์๋ฒ์ ์ฑ๋ฅ์ ์ง๋ฆฌ์ ๋ถํฌ์ ๋ฐ๋ผ ํฌ๊ฒ ๋ฌ๋ผ์ง๋๋ค. ํธ์ฃผ์ ์๋ ์ฌ์ฉ์๊ฐ ์ ๋ฝ์ ์์นํ STUN ์๋ฒ์ ์ฐ๊ฒฐํ๋ ๊ฒ์ ์๋๋์ ์๋ ์๋ฒ์ ์ฐ๊ฒฐํ๋ ๊ฒ๋ณด๋ค ํ๋ณด ๊ฒ์ ์ค ๋ ๋์ ์ง์ฐ ์๊ฐ์ ๊ฒฝํํ๊ฒ ๋ฉ๋๋ค.
- ์ง๋ฆฌ์ ์ผ๋ก ๋ถ์ฐ๋ STUN ์๋ฒ: ์ ์ธ๊ณ ์ฃผ์ ํด๋ผ์ฐ๋ ๋ฆฌ์ (์: ๋ถ๋ฏธ, ์ ๋ฝ, ์์์, ์ค์ธ์๋์)์ STUN ์๋ฒ๋ฅผ ๋ฐฐํฌํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฌ์ฉ์๊ฐ ๊ฐ์ฅ ๊ฐ๊น์ด ์ฌ์ฉ ๊ฐ๋ฅํ STUN ์๋ฒ์ ์ฐ๊ฒฐํ์ฌ ๊ณต๊ฐ IP ์ฃผ์ ๊ฒ์ ์๊ฐ์ ๋จ์ถํ ์ ์์ต๋๋ค.
- ์ค๋ณต TURN ์๋ฒ: STUN๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์ธ๊ณ์ ๋ถ์ฐ๋ TURN ์๋ฒ ๋คํธ์ํฌ๋ฅผ ๊ฐ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฌ์ฉ์๊ฐ ์ง๋ฆฌ์ ์ผ๋ก ์์ ์ด๋ ๋ค๋ฅธ ํผ์ด์ ๊ฐ๊น์ด TURN ์๋ฒ๋ฅผ ํตํด ๋ฆด๋ ์ด๋ ์ ์์ผ๋ฏ๋ก ๋ฆด๋ ์ด๋ก ์ธํ ์ง์ฐ ์๊ฐ์ ์ต์ํํ ์ ์์ต๋๋ค.
- TURN ์๋ฒ ๋ถํ ๋ถ์ฐ: TURN ์๋ฒ์ ๋ํ ์ง๋ฅ์ ์ธ ๋ถํ ๋ถ์ฐ์ ๊ตฌํํ์ฌ ํธ๋ํฝ์ ๊ท ๋ฑํ๊ฒ ๋ถ์ฐํ๊ณ ๋ณ๋ชฉ ํ์์ ๋ฐฉ์งํฉ๋๋ค.
๊ธ๋ก๋ฒ ์: WebRTC ๊ธฐ๋ฐ ๋ด๋ถ ํต์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๋ค๊ตญ์ ๊ธฐ์ ์ ๋ฐ๋, ์ฑ๊ฐํฌ๋ฅด, ์ํ์ธ๋ฃจ์ ์๋ ์ฌ๋ฌด์ค์ ์ง์์ด ์์ ์ ์ผ๋ก ์ฐ๊ฒฐํ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ๊ฐ ์ง์ญ ๋๋ ์ ์ด๋ ์ฃผ์ ๋๋ฅ ํ๋ธ์ STUN/TURN ์๋ฒ๋ฅผ ๋ฐฐํฌํ๋ฉด ์ฐ๊ฒฐ ์ฑ๊ณต๋ฅ ์ด ํฌ๊ฒ ํฅ์๋๊ณ ๋ถ์ฐ๋ ์ฌ์ฉ์์ ์ง์ฐ ์๊ฐ์ด ์ค์ด๋ญ๋๋ค.
2. ํจ์จ์ ์ธ ํ๋ณด ๊ตํ ๋ฐ ์ฐ์ ์์ ์ง์
ICE ์ฌ์์ ํ๋ณด ์์ ํ์ธํ๊ธฐ ์ํ ์ฐ์ ์์ ์ฒด๊ณ๋ฅผ ์ ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ ํ๋ก์ธ์ค์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
- ์กฐ๊ธฐ ํ๋ณด ๊ตํ: ์ ์ฒด ์งํฉ์ด ์์ง๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๋์ ICE ํ๋ณด๊ฐ ์์ฑ๋๋ ์ฆ์ ์๊ทธ๋๋ง ์๋ฒ๋ก ๋ณด๋ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฐ๊ฒฐ ์ค์ ํ๋ก์ธ์ค๋ฅผ ๋ ๋นจ๋ฆฌ ์์ํ ์ ์์ต๋๋ค.
- ๋ก์ปฌ ๋คํธ์ํฌ ์ต์ ํ: `host` ํ๋ณด๋ ์ต๊ณ ์ ์ฑ๋ฅ์ ์ ๊ณตํ๋ฏ๋ก ์ด๋ฅผ ์ค์ ์ ์ผ๋ก ๊ณ ๋ คํฉ๋๋ค. ํ๋ณด๋ฅผ ๊ตํํ ๋ ๋คํธ์ํฌ ํ ํด๋ก์ง๋ฅผ ๊ณ ๋ คํฉ๋๋ค. ๋ ํผ์ด๊ฐ ๋์ผํ ๋ก์ปฌ ๋คํธ์ํฌ(์: ๋์ผํ ํ ๋ผ์ฐํฐ ๋ค์ ์๊ฑฐ๋ ๋์ผํ ๊ธฐ์ LAN ์ธ๊ทธ๋จผํธ ๋ด)์ ์๋ ๊ฒฝ์ฐ ์ง์ ํธ์คํธ ๊ฐ ํต์ ์ด ์ด์์ ์ด๋ฉฐ ๋จผ์ ์๋ํด์ผ ํฉ๋๋ค.
- NAT ์ ํ ์ดํด: ์๋ก ๋ค๋ฅธ NAT ์ ํ(Full Cone, Restricted Cone, Port Restricted Cone, Symmetric)์ ์ฐ๊ฒฐ์ฑ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค. ICE๊ฐ ์ด๋ฌํ ๋ณต์ก์ฑ์ ์๋น ๋ถ๋ถ์ ์ฒ๋ฆฌํ์ง๋ง, ์ธ์์ ๋๋ฒ๊น ์ ๋์์ด ๋ ์ ์์ต๋๋ค. ๋์นญ NAT๋ ๊ฐ ๋์์ ๋ํด ๋ค๋ฅธ ๊ณต๊ฐ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ํผ์ด๊ฐ ์ง์ ์ฐ๊ฒฐ์ ์ค์ ํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค์ด ํนํ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค.
3. `RTCPeerConnection` ๊ตฌ์ฑ
JavaScript์ `RTCPeerConnection` ์์ฑ์๋ฅผ ์ฌ์ฉํ๋ฉด ICE ๋์์ ์ํฅ์ ๋ฏธ์น๋ ๊ตฌ์ฑ ์ต์ ์ ์ง์ ํ ์ ์์ต๋๋ค.
const peerConnection = new RTCPeerConnection(configuration);
`configuration` ๊ฐ์ฒด์๋ ๋ค์์ด ํฌํจ๋ ์ ์์ต๋๋ค.
- `iceServers` ๋ฐฐ์ด: STUN ๋ฐ TURN ์๋ฒ๋ฅผ ์ ์ํ๋ ๊ณณ์ ๋๋ค. ๊ฐ ์๋ฒ ๊ฐ์ฒด์๋ `urls` ์์ฑ์ด ์์ด์ผ ํฉ๋๋ค(๋ฌธ์์ด ๋๋ ๋ฌธ์์ด ๋ฐฐ์ด์ผ ์ ์์ต๋๋ค. ์: `stun:stun.l.google.com:19302` ๋๋ `turn:user@my.turn.server:3478`).
- `iceTransportPolicy` (์ ํ ์ฌํญ): `'all'`(๊ธฐ๋ณธ๊ฐ) ๋๋ `'relay'`๋ก ์ค์ ํ ์ ์์ต๋๋ค. `'relay'`๋ก ์ค์ ํ๋ฉด TURN ์๋ฒ ์ฌ์ฉ์ด ๊ฐ์ ๋๋๋ฐ, ํน์ ํ ์คํธ ๋๋ ๋ฐฉํ๋ฒฝ ์ฐํ ์๋๋ฆฌ์ค๊ฐ ์๋ ํ ๊ฑฐ์ ์ํ์ง ์์ต๋๋ค.
- `continualGatheringPolicy` (์คํ์ ): ICE๊ฐ ์ผ๋ง๋ ์์ฃผ ํ๋ณด ์์ง์ ๊ณ์ํ ์ง ์ ์ดํฉ๋๋ค. ์ต์ ์๋ `'gatherOnce'`์ `'continualGathering'`์ด ํฌํจ๋ฉ๋๋ค. ์ง์์ ์ธ ์์ง์ ์ธ์ ์ค์ ๋คํธ์ํฌ ํ๊ฒฝ์ด ๋ณ๊ฒฝ๋๋ฉด ์ ํ๋ณด๋ฅผ ์ฐพ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
์ค์ ์:
const configuration = {
iceServers: [
{ urls: 'stun:stun.l.google.com:19302' },
{ urls: 'stun1.example.com:3478' },
{
urls: 'turn:my.turn.server.com:3478',
username: 'myuser',
credential: 'mypassword'
}
]
};
const peerConnection = new RTCPeerConnection(configuration);
๊ธ๋ก๋ฒ ์๋น์ค์ ๊ฒฝ์ฐ `iceServers` ๋ชฉ๋ก์ด ๋์ ์ผ๋ก ์ฑ์์ง๊ฑฐ๋ ์ ์ญ์ ์ผ๋ก ๋ถ์ฐ๋ ์๋ฒ๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ๊ตฌ์ฑ๋์๋์ง ํ์ธํ์ธ์. ๋จ์ผ STUN/TURN ์๋ฒ์ ์์กดํ๋ ๊ฒ์ ์ข์ง ์์ ๊ธ๋ก๋ฒ ์ฑ๋ฅ์ ์ด๋ํฉ๋๋ค.
4. ๋คํธ์ํฌ ์ค๋จ ๋ฐ ์คํจ ์ฒ๋ฆฌ
์ต์ ํ๋ ํ๋ณด ์์ง์ผ๋ก๋ ๋คํธ์ํฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๊ฒฌ๊ณ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์์ํด์ผ ํฉ๋๋ค.
- `iceconnectionstatechange` ์ด๋ฒคํธ: `RTCPeerConnection` ๊ฐ์ฒด์์ `iceconnectionstatechange` ์ด๋ฒคํธ๋ฅผ ๋ชจ๋ํฐ๋งํฉ๋๋ค. ์ด ์ด๋ฒคํธ๋ ICE ์ฐ๊ฒฐ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋ ๋ฐ์ํฉ๋๋ค. ์ฃผ์ ์ํ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
- `new`: ์ด๊ธฐ ์ํ.
- `checking`: ํ๋ณด๊ฐ ๊ตํ๋๊ณ ์ฐ๊ฒฐ ํ์ธ์ด ์งํ ์ค์ ๋๋ค.
- `connected`: P2P ์ฐ๊ฒฐ์ด ์ค์ ๋์์ต๋๋ค.
- `completed`: ํ์ํ ๋ชจ๋ ์ฐ๊ฒฐ ํ์ธ์ด ํต๊ณผ๋์์ต๋๋ค.
- `failed`: ์ฐ๊ฒฐ ํ์ธ์ด ์คํจํ๊ณ ICE๊ฐ ์ฐ๊ฒฐ ์ค์ ์ ํฌ๊ธฐํ์ต๋๋ค.
- `disconnected`: ICE ์ฐ๊ฒฐ์ด ๋์ด์ก์ต๋๋ค.
- `closed`: `RTCPeerConnection`์ด ๋ซํ์ต๋๋ค.
- ๋์ฒด ์ ๋ต: `failed` ์ํ์ ๋๋ฌํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ ๋์ฒด ์ ๋ต์ด ์์ด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ค์์ด ํฌํจ๋ ์ ์์ต๋๋ค.
- ์ฐ๊ฒฐ ์ฌ์ค์ ์ ์๋ํฉ๋๋ค.
- ์ฌ์ฉ์์๊ฒ ์ฐ๊ฒฐ ๋ฌธ์ ์๋ฆผ.
- ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ด๊ธฐ ์๋๊ฐ P2P์ธ ๊ฒฝ์ฐ ์๋ฒ ๊ธฐ๋ฐ ๋ฏธ๋์ด ๋ฆด๋ ์ด๋ก ์ ํํฉ๋๋ค.
- `icegatheringstatechange` ์ด๋ฒคํธ: ํ๋ณด ์์ง์ด ์๋ฃ๋์๋์ง(`complete`) ์๊ธฐ ์ํด ์ด ์ด๋ฒคํธ๋ฅผ ๋ชจ๋ํฐ๋งํฉ๋๋ค. ์ด๊ธฐ ํ๋ณด๊ฐ ๋ชจ๋ ๋ฐ๊ฒฌ๋ ํ ์์ ์ ํธ๋ฆฌ๊ฑฐํ๋ ๋ฐ ์ ์ฉํ ์ ์์ต๋๋ค.
5. STUN/TURN ์ด์์ ๋คํธ์ํฌ ํธ๋๋ฒ์ค ๊ธฐ๋ฒ
STUN ๋ฐ TURN์ ICE์ ์ด์์ด์ง๋ง, ๋ค๋ฅธ ๊ธฐ๋ฒ์ ํ์ฉํ๊ฑฐ๋ ์์์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- UPnP/NAT-PMP: ์ผ๋ถ ๋ผ์ฐํฐ๋ Universal Plug and Play(UPnP) ๋๋ NAT Port Mapping Protocol(NAT-PMP)์ ์ง์ํ๋ฉฐ, ์ด๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ผ์ฐํฐ์์ ํฌํธ๋ฅผ ์๋์ผ๋ก ์ด ์ ์์ต๋๋ค. WebRTC ๊ตฌํ์ ์ด๋ฅผ ํ์ฉํ ์ ์์ง๋ง, ๋ณด์์์ ์ด์ ๋ก ๋ณดํธ์ ์ผ๋ก ์ง์๋๊ฑฐ๋ ํ์ฑํ๋์ง๋ ์์ต๋๋ค.
- ํ ํ์นญ: NAT ๋ค์ ์๋ ๋ ํผ์ด๊ฐ ๋์์ ์๋ก์๊ฒ ์ฐ๊ฒฐ์ ์์ํ๋ ค๊ณ ์๋ํ๋ ๊ธฐ๋ฒ์ ๋๋ค. ์ฑ๊ณตํ๋ฉด NAT ์ฅ์น๋ ํ์ ํจํท์ด ์ง์ ํ๋ฅด๋๋ก ํ๋ ์์ ๋งคํ์ ์์ฑํฉ๋๋ค. ICE ํ๋ณด, ํนํ ํธ์คํธ ๋ฐ srflx๋ ํ ํ์นญ์ ํ์ฑํํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
6. SDP(Session Description Protocol)์ ์ค์์ฑ
ICE ํ๋ณด๋ SDP ์ ๊ณต/์๋ต ๋ชจ๋ธ ๋ด์์ ๊ตํ๋ฉ๋๋ค. SDP๋ ๋ฏธ๋์ด ์คํธ๋ฆผ(์ฝ๋ฑ, ์ํธํ ๋ฑ)์ ๊ธฐ๋ฅ์ ์ค๋ช ํ๊ณ ICE ํ๋ณด๋ฅผ ํฌํจํฉ๋๋ค.
- `addIceCandidate()`: ์๊ฒฉ ํผ์ด์ ICE ํ๋ณด๊ฐ ์๊ทธ๋๋ง ์๋ฒ๋ฅผ ํตํด ๋์ฐฉํ๋ฉด ์์ ํด๋ผ์ด์ธํธ๋ `peerConnection.addIceCandidate(candidate)` ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ICE ์์ด์ ํธ์ ์ถ๊ฐํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ICE ์์ด์ ํธ๊ฐ ์ ์ฐ๊ฒฐ ๊ฒฝ๋ก๋ฅผ ์๋ํ ์ ์์ต๋๋ค.
- ์์ ์์: ์ผ๋ฐ์ ์ผ๋ก SDP ์ ๊ณต/์๋ต์ด ์๋ฃ๋๊ธฐ ์ ๊ณผ ํ์ ๋ชจ๋ ํ๋ณด๋ฅผ ๊ตํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. SDP๊ฐ ์์ ํ ํ์๋๊ธฐ ์ ์ด๋ผ๋ ๋์ฐฉํ๋ ๋๋ก ํ๋ณด๋ฅผ ์ถ๊ฐํ๋ฉด ์ฐ๊ฒฐ ์ค์ ์๋๋ฅผ ๋์ผ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ ํ๋ฆ:
- ํผ์ด A๊ฐ `RTCPeerConnection`์ ์์ฑํฉ๋๋ค.
- ํผ์ด A์ ๋ธ๋ผ์ฐ์ ๊ฐ ICE ํ๋ณด ์์ง์ ์์ํ๊ณ `onicecandidate` ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํต๋๋ค.
- ํผ์ด A๋ ์์ง๋ ํ๋ณด๋ฅผ ์๊ทธ๋๋ง ์๋ฒ๋ฅผ ํตํด ํผ์ด B์๊ฒ ๋ณด๋ ๋๋ค.
- ํผ์ด B๊ฐ `RTCPeerConnection`์ ์์ฑํฉ๋๋ค.
- ํผ์ด B์ ๋ธ๋ผ์ฐ์ ๊ฐ ICE ํ๋ณด ์์ง์ ์์ํ๊ณ `onicecandidate` ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํต๋๋ค.
- ํผ์ด B๋ ์์ง๋ ํ๋ณด๋ฅผ ์๊ทธ๋๋ง ์๋ฒ๋ฅผ ํตํด ํผ์ด A์๊ฒ ๋ณด๋ ๋๋ค.
- ํผ์ด A๊ฐ SDP ์ ๊ณต์ ์์ฑํฉ๋๋ค.
- ํผ์ด A๋ SDP ์ ๊ณต์ ํผ์ด B์๊ฒ ๋ณด๋ ๋๋ค.
- ํผ์ด B๋ ์ ๊ณต์ ์์ ํ๊ณ SDP ์๋ต์ ์์ฑํ์ฌ ํผ์ด A์๊ฒ ๋ค์ ๋ณด๋ ๋๋ค.
- ๊ฐ ํผ์ด์ ํ๋ณด๊ฐ ๋์ฐฉํ๋ฉด `addIceCandidate()`๊ฐ ํธ์ถ๋ฉ๋๋ค.
- ICE๋ ๊ตํ๋ ํ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐ ํ์ธ์ ์ํํฉ๋๋ค.
- ์์ ์ ์ธ ์ฐ๊ฒฐ์ด ์ค์ ๋๋ฉด( `connected` ๋ฐ `completed` ์ํ๋ก ์ ํ), ๋ฏธ๋์ด๊ฐ ํ๋ฅผ ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ๋ฐฐํฌ์์ ์ผ๋ฐ์ ์ธ ICE ๋ฌธ์ ํด๊ฒฐ
๊ธ๋ก๋ฒ RTC ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ๋ ICE ๊ด๋ จ ์ฐ๊ฒฐ ์คํจ๋ฅผ ๊ฒช๋ ๊ฒ์ ํํ ์ผ์ ๋๋ค. ๋ค์์ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋๋ค.
- STUN/TURN ์๋ฒ ๋๋ฌ ๊ฐ๋ฅ์ฑ ํ์ธ: STUN/TURN ์๋ฒ๊ฐ ๋ค์ํ ์ง์ญ์์ ์ ๊ทผ ๊ฐ๋ฅํ์ง ํ์ธํฉ๋๋ค. ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ค๋ฅธ ์ง์ญ์ ์๋ฒ์์ `ping` ๋๋ `traceroute`์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ ๊ฒฝ๋ก๋ฅผ ํ์ธํฉ๋๋ค.
- ์๊ทธ๋๋ง ์๋ฒ ๋ก๊ทธ ๊ฒํ : ICE ํ๋ณด๊ฐ ์์ชฝ ํผ์ด์์ ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ก๋๊ณ ์์ ๋๋์ง ํ์ธํฉ๋๋ค. ์ง์ฐ ๋๋ ๋๋ฝ๋ ๋ฉ์์ง๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ: ์ต์ ๋ธ๋ผ์ฐ์ ์๋ ํ๋ฅญํ WebRTC ๋๋ฒ๊น ๋๊ตฌ๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด Chrome์ `chrome://webrtc-internals` ํ์ด์ง๋ ICE ์ํ, ํ๋ณด ๋ฐ ์ฐ๊ฒฐ ํ์ธ์ ๋ํ ํ๋ถํ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋ฐฉํ๋ฒฝ ๋ฐ NAT ์ ํ: P2P ์ฐ๊ฒฐ ์คํจ์ ๊ฐ์ฅ ๋น๋ฒํ ์์ธ์ ์ ํ์ ์ธ ๋ฐฉํ๋ฒฝ ๋๋ ๋ณต์กํ NAT ๊ตฌ์ฑ์ ๋๋ค. ๋์นญ NAT๋ ์ง์ P2P์ ํนํ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค. ์ง์ ์ฐ๊ฒฐ์ด ์ง์์ ์ผ๋ก ์คํจํ๋ฉด TURN ์๋ฒ ์ค์ ์ด ๊ฒฌ๊ณ ํ์ง ํ์ธํ์ญ์์ค.
- ์ฝ๋ฑ ๋ถ์ผ์น: ์๋ฐํ ๋งํ๋ฉด ICE ๋ฌธ์ ๋ ์๋์ง๋ง, ์ฝ๋ฑ ๋นํธํ์ฑ์ ICE ์ฐ๊ฒฐ์ด ์ค์ ๋ ํ์๋ ๋ฏธ๋์ด ์คํจ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์์ชฝ ํผ์ด๊ฐ ๊ณตํต ์ฝ๋ฑ(์: ๋น๋์ค์ ๊ฒฝ์ฐ VP8, VP9, H.264, ์ค๋์ค์ ๊ฒฝ์ฐ Opus)์ ์ง์ํ๋์ง ํ์ธํฉ๋๋ค.
ICE ๋ฐ ๋คํธ์ํฌ ํธ๋๋ฒ์ค์ ๋ฏธ๋
ICE ํ๋ ์์ํฌ๋ ์ฑ์ํ๊ณ ๋งค์ฐ ํจ๊ณผ์ ์ด์ง๋ง, ์ธํฐ๋ท์ ๋คํธ์ํน ํ๊ฒฝ์ ๋์์์ด ์งํํ๊ณ ์์ต๋๋ค. ์ ๊ธฐ์ ๊ณผ ์งํํ๋ ๋คํธ์ํฌ ์ํคํ ์ฒ๋ ICE ๋๋ ๋ณด์ ๊ธฐ๋ฒ์ ๋ํ ์ถ๊ฐ์ ์ธ ๊ฐ์ ์ ํ์๋ก ํ ์ ์์ต๋๋ค. ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ๊ฒฝ์ฐ WebRTC ์ ๋ฐ์ดํธ ๋ฐ IETF์ ๊ฐ์ ์กฐ์ง์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
NAT์ ๋ํ ์์กด๋๋ฅผ ์ค์ด์ง๋ง ์์ฒด์ ์ธ ๋ณต์ก์ฑ์ ๋์ ํ๋ IPv6์ ์ฆ๊ฐ ์ถ์ธ๋ฅผ ๊ณ ๋ คํ์ญ์์ค. ๋ํ ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ํ๊ฒฝ๊ณผ ์ ๊ตํ ๋คํธ์ํฌ ๊ด๋ฆฌ ์์คํ ์ ๋๋๋ก ํ์ค ICE ์์ ๊ณผ ๊ฐ์ญํ ์ ์์ผ๋ฉฐ, ๋ง์ถคํ ๊ตฌ์ฑ ๋๋ ๋ ๊ณ ๊ธ ํธ๋๋ฒ์ค ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค.
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ฅผ ์ํ ์คํ ๊ฐ๋ฅํ ์ธ์ฌ์ดํธ
๊ธ๋ก๋ฒ WebRTC ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ํํ ๊ฒฝํ์ ์ ๊ณตํ๋๋ก ํ๋ ค๋ฉด:
- ๊ฒฌ๊ณ ํ ์๊ทธ๋๋ง ์ธํ๋ผ ์ฐ์ ์์ ์ง์ : ์์ ์ ์ธ ์๊ทธ๋๋ง ์์ด๋ ICE ํ๋ณด ๊ตํ์ด ์คํจํฉ๋๋ค. WebSockets ๋๋ ๊ธฐํ ์ค์๊ฐ ๋ฉ์์ง์ ๋ํด ๊ฒ์ฆ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ญ์์ค.
- ์ง๋ฆฌ์ ์ผ๋ก ๋ถ์ฐ๋ STUN/TURN ์๋ฒ์ ํฌ์: ๊ธ๋ก๋ฒ ๋๋ฌ ๋ฒ์๋ฅผ ์ํด์๋ ํ์์ ์ ๋๋ค. ๋ฐฐํฌ ์ฉ์ด์ฑ์ ์ํด ํด๋ผ์ฐ๋ ์ ๊ณต์ ์ฒด์ ๊ธ๋ก๋ฒ ์ธํ๋ผ๋ฅผ ํ์ฉํ์ญ์์ค. Xirsys, Twilio ๋๋ Coturn(์์ฒด ํธ์คํ )๊ณผ ๊ฐ์ ์๋น์ค๊ฐ ์ ์ฉํ ์ ์์ต๋๋ค.
- ํฌ๊ด์ ์ธ ์ค๋ฅ ์ฒ๋ฆฌ ๊ตฌํ: ICE ์ฐ๊ฒฐ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ์ฐ๊ฒฐ์ด ์คํจํ ๋ ์ฌ์ฉ์ ํผ๋๋ฐฑ์ ์ ๊ณตํ๊ฑฐ๋ ๋์ฒด ๋ฉ์ปค๋์ฆ์ ๊ตฌํํฉ๋๋ค.
- ๋ค์ํ ๋คํธ์ํฌ์์ ๊ด๋ฒ์ํ๊ฒ ํ ์คํธ: ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ชจ๋ ๊ณณ์์ ์๋ฒฝํ๊ฒ ์๋ํ๋ค๊ณ ๊ฐ์ ํ์ง ๋ง์ญ์์ค. ๋ค๋ฅธ ๊ตญ๊ฐ, ๋คํธ์ํฌ ์ ํ(Wi-Fi, ์ ๋ฃฐ๋ฌ, VPN) ๋ฐ ๋ค์ํ ๊ธฐ์ ๋ฐฉํ๋ฒฝ ๋ค์์ ํ ์คํธํ์ญ์์ค.
- WebRTC ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋ฐ์ดํธ ์ ์ง: ๋ธ๋ผ์ฐ์ ๊ณต๊ธ์ ์ฒด ๋ฐ WebRTC ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ณ ๋คํธ์ํฌ ํธ๋๋ฒ์ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ง์์ ์ผ๋ก ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
- ์ฌ์ฉ์ ๊ต์ก: ์ฌ์ฉ์๊ฐ ํนํ ์ ํ์ ์ธ ๋คํธ์ํฌ ๋ค์ ์๋ ๊ฒฝ์ฐ ํ์ํ ์ฌํญ(์: ํน์ ํฌํธ ์ด๊ธฐ, ํน์ ๋ฐฉํ๋ฒฝ ๊ธฐ๋ฅ ๋นํ์ฑํ)์ ๋ํ ๋ช ํํ ์ง์นจ์ ์ ๊ณตํฉ๋๋ค.
๊ฒฐ๋ก
WebRTC ์ฐ๊ฒฐ ์ค์ ์ต์ ํ, ํนํ ๊ธ๋ก๋ฒ ์ฒญ์ค์ ๊ฒฝ์ฐ ICE ํ๋ ์์ํฌ์ ํ๋ณด ์์ฑ ํ๋ก์ธ์ค์ ๋ํ ๊น์ ์ดํด์ ๋ฌ๋ ค ์์ต๋๋ค. STUN ๋ฐ TURN ์๋ฒ๋ฅผ ์ ๋ต์ ์ผ๋ก ๋ฐฐํฌํ๊ณ , ํ๋ณด๋ฅผ ํจ์จ์ ์ผ๋ก ๊ตํํ๊ณ ์ฐ์ ์์๋ฅผ ์ง์ ํ๊ณ , `RTCPeerConnection`์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑํ๊ณ , ๊ฒฌ๊ณ ํ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํจ์ผ๋ก์จ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ ์ค์๊ฐ ํต์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์ฑ๊ณผ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ๊ธ๋ก๋ฒ ๋คํธ์ํฌ์ ๋ณต์ก์ฑ์ ํ์ํ๋ ค๋ฉด ์ ๊ฒฌ์ง๋ช , ์ธ์ฌํ ๊ตฌ์ฑ ๋ฐ ์ง์์ ์ธ ํ ์คํธ๊ฐ ํ์ํ์ง๋ง, ๊ทธ ๋ณด์์ ์ง์ ํ ์ฐ๊ฒฐ๋ ์ธ์์ ๋๋ค.